iT邦幫忙

2022 iThome 鐵人賽

DAY 4
1
自我挑戰組

【從工程師升級成為資深工程師的那檔事】 系列 第 4

【從工程師升級成為資深工程師的那檔事 Day4】SOLID 五大原則 - 里氏替換原則

  • 分享至 

  • xImage
  •  

在前面中我們有介紹到 開放封閉原則(OCP)
開放封閉原則可以說是物件導向分析(OOA)的核心概念,
而里氏替換原則(LSP)則是實踐物件導向設計的方法之一。

定義

If S is a subtype of T, then objects of type T may be replaced with objects of type S,
without breaking the program.

這段話簡單來說就是父型別(Type)出現的地方,都可以用子型別替代,
且不會影響程式的運作。

準則

里氏替換原則 在定義上其實有很多物件導向對於繼承/實作(extend/implement)上的規範。
這邊統整成三個規範:

  • 子型別的方法(method)輸入的參數可以多不能少
  • 回傳的數量可以多不能少
  • 子型別的方法必須照著父型別定義的規範開發
    (在實際開發中代表,實作內容必須跟方法名稱或註解內容一致,
    並且只能拋出父型別定義的Exception或是其子類別。)

用途

繼承/實作(extend/implement)的使用對於我們程式開發帶來了許多的便利性,
但同時也帶了不少的弊端,例如類別間的耦合性就會增加,當你對於父類別作修改時,
同時也會影響到子類別。
這時透過遵循里氏替換原則,我們更能確保父類別的必要性與子類別的擴展性。
進而有更穩固的程式結構。

結語

很多人在學習里氏替換原則常常會被自己所使用的語言侷限(例如 C#、JAVA....),
而會認為在繼承/實作(extend/implement)在override的時候就是只能與父類別輸入/輸出完全一致。
其實在一些語言中是支援不同數量的輸入/輸出。

里氏替換原則在實際開發中,其實就是兩點

  1. 父型別是具有必要性、原則性的
  2. 子型別是符合父類別的規範,且有擴展功能的

上一篇
【從工程師升級成為資深工程師的那檔事 Day3】SOLID 五大原則 - 開放封閉原則
下一篇
【從工程師升級成為資深工程師的那檔事 Day5】SOLID 五大原則 - 介面隔離原則
系列文
【從工程師升級成為資深工程師的那檔事】 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言